//package com.zmn.plat.dubbo.interfaces.product;
//
//import com.zmn.common.dto.VtDTO;
//import com.zmn.common.dto2.ResponseDTO;
//import com.zmn.plat.common.dto.product.*;
//import com.zmn.plat.common.dto.product.base.ProductBaseDRO;
//import com.zmn.plat.common.dto.product.emissions.ProductEmissionsDRO;
//import com.zmn.plat.common.dto.product.picture.ProductGuaranteeDRO;
//import com.zmn.plat.common.dto.product.picture.ServProductPictureDRO;
//import com.zmn.plat.common.dto.product.price.ProductPriceDRO;
//import com.zmn.plat.dubbo.interfaces.price.BkProductPriceRemoteService;
//import com.zmn.plat.dubbo.utils.DubboConsts;
//import io.swagger.annotations.Api;
//import io.swagger.annotations.ApiOperation;
//import io.swagger.annotations.ApiParam;
//
//import javax.validation.Valid;
//import javax.validation.constraints.NotEmpty;
//import javax.validation.constraints.NotNull;
//import javax.validation.constraints.Positive;
//import javax.validation.constraints.Size;
//import java.util.List;
//
///**
// * 产品查询远程服务
// *
// * @author tanghongjun
// * @since 2020年3月24日10:09:53
// */
//@Api(value = "产品查询远程服务", tags = {"产品"})
//public interface ProductListRemoteService {
//
//
//    /**
//     * 描述: 查询后台产品总排放量
//     *
//     * @param productId 产品ID
//     * @return 产品排放量
//     * @auther tanghongjun
//     * @since 2020年8月4日10:36:19
//     */
//    @ApiOperation(value = "查询后台产品总排放量", response = ResponseDTO.class, notes = "", tags = {"产品"})
//    ResponseDTO<Integer> getTotalEmissionsById(@NotNull(message = "产品ID不能为空") @Valid @ApiParam(value = "入参", required = true) Integer productId);
//
//    /**
//     * 描述: 查询前台产品总排放量
//     *
//     * @param showProductId 前台产品ID
//     * @return 产品排放量
//     * @auther linfeng
//     * @since 2020/11/30 11:20
//     */
//    @ApiOperation(value = "查询前台产品总排放量", response = ResponseDTO.class, notes = "", tags = {"产品"})
//    ResponseDTO<Integer> getTotalEmissionsByShowProductId(@NotNull(message = "前台产品ID不能为空") @Valid @ApiParam(value = "入参", required = true) Integer showProductId);
//
//    /**
//     * 描述: 根据渠道城市产品以及保内保外，确定产品是否支持计价器
//     *
//     * @param channelId 渠道ID
//     * @param cityId    城市ID
//     * @param productId 产品ID
//     * @param type      保内保外
//     * @return Boolean true 支持 false 不支持
//     * @since 2020年4月13日15:54:34
//     */
//    @ApiOperation(value = "根据渠道城市产品以及保内保外，确定产品是否支持计价器", response = ResponseDTO.class, notes = "", tags = {"产品"})
//    ResponseDTO<Boolean> checkTraiffByChannelAndCityAndProductAndType(
//            @NotNull(message = "channelId不能为空") @Positive(message = "channelId必须为大于0的正整数") @ApiParam(value = "渠道ID", required = true) Integer channelId,
//            @NotNull(message = "cityId不能为空") @Positive(message = "cityId必须为大于0的正整数") @ApiParam(value = "城市ID", required = true) Integer cityId,
//            @NotNull(message = "productId不能为空") @Positive(message = "productId必须为大于0的正整数") @ApiParam(value = "产品ID", required = true) Integer productId,
//            @NotNull(message = "type不能为空") @Positive(message = "type必须为大于0的正整数") @ApiParam(value = "保内保外", required = true) Integer type);
//
//    /**
//     * 描述: 查询前台产品总排放量
//     *
//     * @param showProductIdList 前台产品ID
//     * @return 产品排放量
//     * @auther tanbiao
//     * @since 2021/04/02 11:20
//     */
//    @ApiOperation(value = "查询前台产品总排放量", response = ResponseDTO.class, notes = "", tags = {"产品排量"})
//    ResponseDTO<List<ProductEmissionsDRO>> listTotalEmissionsByShowProductIdList(@NotEmpty(message = "showProductIdList参数不能为空且个数不能超过" + DubboConsts.MAX_PARAM_LENGTH) @Size(min = 1, max = DubboConsts.MAX_PARAM_LENGTH,
//            message = "showProductIdList参数不能为空且个数不能超过" + DubboConsts.MAX_PARAM_LENGTH) @ApiParam(value = "前台产品id集合", required = true) List<Integer> showProductIdList);
//
//    /**
//     * 描述: 根据前台产品id查询对应的额二级分类下的默认产品
//     * 默认前台产品无需校验后台产品的业务类型
//     *
//     * @param showProductDefaultSimpleDIO 前台产品id
//     * @return List《ShowProductDefaultSimpleDRO》
//     * @auther tanbiao
//     * @since 2021/03/24 17:02:23
//     */
//    @ApiOperation(value = "前台产品的默认产品", response = ResponseDTO.class, notes = "", tags = {"默认产品"})
//    ResponseDTO<List<ShowProductDefaultSimpleDRO>> listDefaultShowProductsByShowProductIds(@ApiParam(value = "前台产品id集合", required = true) @Valid ShowProductDefaultSimpleDIO showProductDefaultSimpleDIO);
//
//
//    /**
//     * 描述: 根据入参（详细信息请查看ProductDIO）查询产品列表信息 参数说明，如果传入了单个产品ID，则直接根据产品ID查询相关基本信息，不过滤关键字，渠道，分类信息，产品ID集合等信息
//     * 如果没有传入产品ID集合，则直接，则直接根据产品ID集合查询相关基本信息，不过滤关键字，渠道，分类信息
//     *
//     * @param productDIO 基本产品查询入参
//     * @return List《ProductAllMsgInfoDRO》
//     * @auther tanghongjun
//     * @see ProductListRemoteService#listBaseDROByDIO(com.zmn.plat.common.dto.product.ProductDIO) 基本信息
//     * @see BkProductPriceRemoteService#listProductPriceByQuery(com.zmn.plat.common.dto.price.ProductPriceQuery) 价格信息
//     * @see ProductListRemoteService#listProductGuaranteeByIdList(java.util.List) 保障信息
//     * @see ProductListRemoteService#listProductPictureByIdList(java.util.List) 图片信息
//     * @since 2020/3/24 10:10
//     */
//    @Deprecated
//    @ApiOperation(value = "查询产品列表信息", response = ResponseDTO.class, notes = "", tags = {"产品"})
//    ResponseDTO<List<ProductAllMsgInfoDRO>> listByDIO(@NotNull(message = "入参不能为空") @Valid @ApiParam(value = "入参", required = true) ProductDIO productDIO);
//
//
//    /**
//     * 描述: 详见listByDIO，不同点：1.产品ID集合需要和其他条件一起校验 2.不返回价格
//     *
//     * @param dio 基本产品查询入参
//     * @return List《ProductAllMsgInfoDRO》
//     * @auther guoqiao
//     * @since 2021/5/10 10:10
//     */
//    @ApiOperation(value = "查询产品列表信息", response = ResponseDTO.class, notes = "", tags = {"产品"})
//    ResponseDTO<List<ProductAllMsgInfoDRO>> listSimpleByDIO(@NotNull(message = "入参不能为空") @Valid @ApiParam(value = "入参", required = true) ProductSimpleDIO dio);
//
//
//    /**
//     * 描述: 根据入参（详细信息请查看ProductDIO）查询产品列表信息 参数说明，如果传入了单个产品ID，则直接根据产品ID查询相关基本信息，不过滤关键字，渠道，分类信息，产品ID集合等信息
//     * 如果没有传入产品ID集合，则直接，则直接根据产品ID集合查询相关基本信息，不过滤关键字，渠道，分类信息
//     *
//     * @param productDIO 基本产品查询入参
//     * @return List《ProductAllMsgInfoDRO》
//     * @desc:店铺新增需求：需要在调用com.zmn.plat.dubbo.interfaces.product.ProductListRemoteService#listByDIO(com.zmn.plat.common.dto.product.ProductDIO) 的情况下返回产品对应的分类下的其他产品和分类的简称
//     * @auther tanghongjun
//     * @see ProductListRemoteService#listBaseDROByDIO(com.zmn.plat.common.dto.product.ProductDIO) 基本信息
//     * @see BkProductPriceRemoteService#listProductPriceByQuery(com.zmn.plat.common.dto.price.ProductPriceQuery) 价格信息
//     * @see ProductListRemoteService#listProductGuaranteeByIdList(java.util.List) 保障信息
//     * @see ProductListRemoteService#listProductPictureByIdList(java.util.List) 图片信息
//     * @since 2020/3/24 10:10
//     */
//    @Deprecated
//    @ApiOperation(value = "查询产品列表信息", response = ResponseDTO.class, notes = "", tags = {"产品"})
//    ResponseDTO<List<ProductAllMsgInfoExtDRO>> listExtInfoByDIO(@NotNull(message = "入参不能为空") @Valid @ApiParam(value = "入参", required = true) ProductDIO productDIO);
//
//    /**
//     * 描述: 根据产品ID集合、渠道ID、城市ID、产品展示类型、产品类型、品牌ID查询产品价格信息
//     *
//     * @param productIdList   产品ID集合 必填
//     * @param cityId          城市ID 必填
//     * @param channelId       渠道ID 必填
//     * @param type            产品类型：1.通用产品，2.渠道产品 必填
//     * @param showType        产品展示类型：1.后台产品，2.前台产品,3.计价器产品 必填
//     * @param isTariffChannel 是否默认为计价器渠道，true表示计价器渠道，null或false表示不是默认计价器渠道
//     * @param brandId         品牌ID 可为空
//     * @return List《ProductPriceDRO》
//     * @auther tanghongjun
//     * @see ProductListRemoteService#listProductPriceByDIO(com.zmn.plat.common.dto.product.ProductPriceDIO)
//     * @since 2020/3/24 14:15
//     */
//    @Deprecated
//    @ApiOperation(value = "根据产品ID集合、渠道ID、城市ID、产品展示类型、产品类型、品牌ID查询产品价格信息", response = ResponseDTO.class, notes = "", tags = {"产品"})
//    ResponseDTO<List<ProductPriceDRO>> listProductPriceByIdListAndChannelAndCityAndShowTypeAndTypeAndBrand(
//            @NotEmpty(message = "productIdList参数不能为空且个数不能超过" + DubboConsts.MAX_PARAM_LENGTH) @Size(min = 1, max = DubboConsts.MAX_PARAM_LENGTH,
//                    message = "productIdList参数不能为空且个数不能超过" + DubboConsts.MAX_PARAM_LENGTH) @ApiParam(value = "产品ID集合", required = true) List<Integer> productIdList,
//            @NotNull(message = "channelId不能为空") @Positive(message = "channelId必须为大于0的正整数") @ApiParam(value = "渠道ID", required = true) Integer channelId,
//            @NotNull(message = "cityId不能为空") @Positive(message = "cityId必须为大于0的正整数") @ApiParam(value = "城市ID", required = true) Integer cityId,
//            @NotNull(message = "showType不能为空") @Positive(message = "showType必须为大于0的正整数") @ApiParam(value = "产品展示类型", required = true) Integer showType,
//            @NotNull(message = "type不能为空") @Positive(message = "type必须为大于0的正整数") @ApiParam(value = "产品类型", required = true) Integer type,
//            @NotNull(message = "isTariffChannel不能为空") @ApiParam(value = "是否默认为计价器渠道") Boolean isTariffChannel, @Positive(message = "type必须为大于0的正整数") @ApiParam(value = "产品类型") Integer brandId);
//
//
//    /**
//     * 描述: 根据产品ID集合、渠道ID、城市ID、产品展示类型、产品类型、品牌ID查询产品价格信息
//     * 同listProductPriceByIdListAndChannelAndCityAndShowTypeAndTypeAndBrand，优化了价格的处理方式
//     *
//     * @return List《ProductPriceDRO》
//     * @auther tanbiao
//     * @see BkProductPriceRemoteService#listProductPriceByQuery(com.zmn.plat.common.dto.price.ProductPriceQuery)
//     * @since 2021/3/24 14:15
//     */
//    @Deprecated
//    @ApiOperation(value = "根据产品ID集合、渠道ID、城市ID、产品展示类型、产品类型、品牌ID查询产品价格信息", response = ResponseDTO.class, notes = "", tags = {"产品"})
//    ResponseDTO<List<ProductPriceDRO>> listProductPriceByDIO(@NotNull(message = "入参不能为空") @Valid @ApiParam(value = "入参", required = true) ProductPriceDIO productPriceDIO);
//
//
//    /**
//     * 描述: 根据产品ID集合查询产品保障信息
//     *
//     * @param productIdList 产品ID集合 必填
//     * @return List《ProductGuaranteeDRO》
//     * @auther tanghongjun
//     * @since 2020/3/24 14:18
//     */
//    @ApiOperation(value = "根据产品ID集合查询产品保障信息", response = ResponseDTO.class, notes = "", tags = {"产品"})
//    ResponseDTO<List<ProductGuaranteeDRO>> listProductGuaranteeByIdList(@NotEmpty(message = "productIdList参数不能为空且个数不能超过" + DubboConsts.MAX_PARAM_LENGTH) @Size(min = 1,
//            max = DubboConsts.MAX_PARAM_LENGTH, message = "productIdList参数不能为空且个数不能超过" + DubboConsts.MAX_PARAM_LENGTH) @ApiParam(value = "产品ID集合", required = true) List<Integer> productIdList);
//
//    /**
//     * 描述: 根据产品ID集合查询产品图片信息
//     *
//     * @param productIdList 产品ID集合 必填
//     * @return List《ServProductPictureDRO》
//     * @auther tanghongjun
//     * @since 2020/3/24 14:19
//     */
//    @ApiOperation(value = "根据产品ID集合查询产品图片信息", response = ResponseDTO.class, notes = "", tags = {"产品"})
//    ResponseDTO<List<ServProductPictureDRO>> listProductPictureByIdList(@NotEmpty(message = "productIdList参数不能为空且个数不能超过" + DubboConsts.MAX_PARAM_LENGTH) @Size(min = 1,
//            max = DubboConsts.MAX_PARAM_LENGTH, message = "productIdList参数不能为空且个数不能超过" + DubboConsts.MAX_PARAM_LENGTH) @ApiParam(value = "产品ID集合", required = true) List<Integer> productIdList);
//
//    /**
//     * 描述: 根据产品名称集合查询产品信息
//     *
//     * @param nameList 产品名称集合 必填
//     * @param showType 产品展示类型：1.后台，2.前台，3.计价器 可为空
//     * @return List《VtDTO》（ID，名称）
//     * @auther tanghongjun
//     * @since 2020年7月9日16:44:40
//     */
//    @ApiOperation(value = "根据产品名称集合查询产品信息", response = ResponseDTO.class, notes = "", tags = {"产品"})
//    ResponseDTO<List<VtDTO>> listVtByNameList(
//            @NotEmpty(message = "nameList参数不能为空且个数不能超过" + DubboConsts.MAX_PARAM_LENGTH) @Size(min = 1, max = DubboConsts.MAX_PARAM_LENGTH,
//                    message = "nameList参数不能为空且个数不能超过" + DubboConsts.MAX_PARAM_LENGTH) @ApiParam(value = "产品ID集合", required = true) List<String> nameList,
//            @Positive(message = "showType必须为大于0的正整数") @ApiParam(value = "产品展示类型") Integer showType);
//
//    /**
//     * 描述: 根据入参（详细信息请查看ProductDIO）查询产品列表信息 参数说明，如果传入了单个产品ID，则直接根据产品ID查询相关基本信息，不过滤关键字，渠道，分类信息，产品ID集合等信息
//     * 如果没有传入产品ID集合，则直接，则直接根据产品ID集合查询相关基本信息，不过滤关键字，渠道，分类信息
//     *
//     * @param productDIO 基本产品查询入参 必填
//     * @return List《ProductBaseDRO》
//     * @auther tanghongjun
//     * @since 2020/3/24 10:50
//     */
//    @ApiOperation(value = "查询产品列表信息", response = ResponseDTO.class, notes = "", tags = {"产品"})
//    ResponseDTO<List<ProductBaseDRO>> listBaseDROByDIO(@NotNull(message = "入参不能为空") @Valid @ApiParam(value = "入参", required = true) ProductDIO productDIO);
//
//    @ApiOperation(value = "根据业务类型查询可用的前台产品", response = ResponseDTO.class)
//    ResponseDTO<List<ProductBaseDRO>> listEcProduct(@ApiParam(value = "业务类型", required = true) Integer bizType);
//
//    /**
//     * 描述: 根据产品类型、服务分类ID，产品二级分类ID，产品状态，查询可用产品（工单可用） 可用：如果是查询前台产品，则其关联后台产品必须有一个是上架状态 如果是查询后台产品，则其对应的前台产品必须是上架状态 如果是查询计价器产品，则其关联的后台产品必须有一个是上架状态
//     *
//     * @param showType    产品展示类型：1.后台，2.前台，3.计价器
//     * @param servCategId 服务分类ID
//     * @param categTwoId  产品二级分类ID
//     * @param status      产品状态
//     * @return List《ProductBaseDRO》
//     * @since 2020年4月2日11:26:33
//     */
//    @ApiOperation(value = "根据产品类型、服务分类ID，产品二级分类ID，产品状态，查询可用产品（工单可用）", response = ResponseDTO.class, notes = "", tags = {"产品"})
//    ResponseDTO<List<ProductBaseDRO>> listByShowTypeAndServCategAndCategAndStatus(
//            @NotNull(message = "showType不能为空") @Positive(message = "showType必须为大于0的正整数") @ApiParam(value = "产品展示类型", required = true) Integer showType,
//            @Positive(message = "servCategId必须为大于0的正整数") @ApiParam(value = "服务分类ID", required = true) Integer servCategId,
//            @Positive(message = "categTwoId必须为大于0的正整数") @ApiParam(value = "产品二级分类ID", required = true) Integer categTwoId,
//            @Positive(message = "status必须为大于0的正整数") @ApiParam(value = "产品状态", required = true) Integer status);
//
//    /**
//     * 描述: 根据后台产品ID获取前台产品
//     *
//     * @param productId 后台产品ID
//     * @param status    产品状态，可以为空，为空则查询所有复合条件的前台产品
//     * @return FaultProductDRO 产品DRO集合
//     * @auther tanghongjun
//     * @since 2019/9/23 14:29
//     */
//    @ApiOperation(value = "根据后台产品ID获取前台产品", response = ResponseDTO.class, notes = "", tags = {"产品"})
//    ResponseDTO<List<ProductBaseDRO>> listProductByProductIdAndStatus(
//            @NotNull(message = "productId不能为空") @Positive(message = "productId必须为大于0的正整数") @ApiParam(value = "后台产品ID", required = true) Integer productId,
//            @Positive(message = "status必须为大于0的正整数") @ApiParam(value = "产品状态", required = true) Integer status);
//
//    /**
//     * 描述: 根据前台产品ID获取后台产品 分以下三种情况 1.channelId 为指定的渠道,productType为null，查询渠道产品+通用产品 2.channelId为空（null）productType为1，查询通用产品 3.channelId
//     * 为指定的渠道,productType为2，查询渠道专属产品
//     *
//     * @param showProductId 前台产品ID
//     * @param status        产品状态，可以为空，为空则查询所有复合条件的后台产品
//     * @param channelId     产品所属的渠道id
//     * @param productType   产品类型
//     * @return ProductBaseDRO 后台产品DRO集合
//     * @auther tanghongjun
//     * @since 2019/9/23 14:29
//     */
//    @ApiOperation(value = "根据前台产品ID获取后台产品", response = ResponseDTO.class, notes = "", tags = {"产品"})
//    ResponseDTO<List<ProductBaseDRO>> listProductByShowProductIdAndStatusAndChannelIdAndProductType(
//            @NotNull(message = "showProductId不能为空") @Positive(message = "showProductId必须为大于0的正整数")
//            @ApiParam(value = "前台产品ID", required = true) Integer showProductId,
//            @Positive(message = "status必须为大于0的正整数") @ApiParam(value = "产品状态", required = true) Integer status,
//            @Positive(message = "channelId必须为大于0的正整数") @ApiParam(value = "产品所属的渠道id", required = true) Integer channelId,
//            @ApiParam(value = "产品类型", required = false) Integer productType);
//
//    /**
//     * 描述: 根据查询条件分页查询产品列表信息 特别注意ServProductDIO中新增的 productType参数的说明
//     *
//     * @param query
//     * @return: List<FaultProductDRO>
//     * @auther: tanghongjun
//     * @since: 2018/10/23 11:12
//     */
//    @ApiOperation(value = "根据查询条件分页查询产品列表信息", response = ResponseDTO.class, notes = "", tags = {"产品"})
//    ResponseDTO<List<ProductBaseDRO>> listProductPageByDio(@NotNull(message = "入参不能为空") @Valid @ApiParam(value = "入参", required = true) ProductDIO query);
//
//    /**
//     * 描述: 根据渠道ID和产品基本信息分页查询渠道开通产品
//     *
//     * @param channelId      渠道ID
//     * @param servProductDIO 产品查询条件
//     * @return 产品集合
//     * @auther tanghongjun
//     * @since 2019/9/7 11:29
//     */
//    @ApiOperation(value = "根据渠道ID和产品基本信息分页查询渠道开通产品", response = ResponseDTO.class, notes = "", tags = {"产品"})
//    ResponseDTO<List<ProductBaseDRO>> listByChannelIdAndProductDIO(Integer channelId, @NotNull(message = "入参不能为空") @Valid @ApiParam(value = "入参", required = true) ProductDIO servProductDIO);
//
//    /**
//     * 描述: 根据查询条件查询复合条件的产品数
//     *
//     * @param query
//     * @return
//     * @auther tanghongjun
//     * @since 2019/8/15 14:44
//     */
//    @ApiOperation(value = "根据查询条件查询复合条件的产品数", response = ResponseDTO.class, notes = "", tags = {"产品"})
//    ResponseDTO<Integer> countByDio(@NotNull(message = "入参不能为空") @Valid @ApiParam(value = "入参", required = true) ProductDIO query);
//
//    /**
//     * 描述: 根据渠道ID和产品基本信息分页查询渠道开通产品条数
//     *
//     * @param channelId      渠道ID
//     * @param servProductDIO 产品查询条件
//     * @return 产品集合
//     * @auther tanghongjun
//     * @since 2019/9/7 11:29
//     */
//    @ApiOperation(value = "根据渠道ID和产品基本信息分页查询渠道开通产品条数", response = ResponseDTO.class, notes = "", tags = {"产品"})
//    ResponseDTO<Integer> countByChannelIdAndProductDIO(Integer channelId, @NotNull(message = "入参不能为空") @Valid @ApiParam(value = "入参", required = true) ProductDIO servProductDIO);
//
//    /**
//     * 描述: 定渠道Id和城市Id与给定商品Id进行筛选
//     *
//     * @param productDIO 前台产品id
//     * @return List《Integer》
//     * @auther liuyong
//     * @since 20201/4/22 16:20
//     */
//    @ApiOperation(value = "前台产品Id", response = ResponseDTO.class, notes = "", tags = {"默认产品"})
//    ResponseDTO<List<Integer>> getShowProductIds(@ApiParam(value = "前台产品id集合", required = true) @Valid ShowProductDefaultSimpleDIO productDIO);
//
//}
